//动物类
class Animal {
    public String name;
    public int age;
    public String color;

    //构造函数
    public Animal(){}
    public Animal(String name){
        this.name = name;
    }
    public void eat(){
        System.out.println(this.name + "正在进食");
    }
}

//狗类
//继承的语法-->修饰符 class 子类名 extends 父类名 {}  //子类继承父类
class Dog extends Animal {
    //构造函数
    public Dog() {
        //父类显示定义无参或默认的构造方法
        //子类不显示定义父类构造方法，默认第一行就是super()
    }
    public Dog(String name) {
        super(name);
    }
    //狗特有的属性
    public void wangWang() {
        System.out.println(this.name + "正在汪汪汪");
    }
    //构成方法重写/覆盖
    //1.方法名一样
    //2.参数列表一样(个数，类型，顺序)
    //3.返回值一样
    public void eat(){
        System.out.println(this.name + "正在吃狗粮");
    }
}

//猫类
class Cat extends Animal {
    //构造函数
    public Cat() {
        //父类显示定义无参或默认的构造方法时
        //子类不显示定义父类构造方法，默认第一行就是super()
    }
    public Cat(String name) {
        super(name);
    }

    //猫特有的属性
    public void miaoMiao() {
        System.out.println(this.name + "正在喵喵喵");
    }
    //构成方法重写/覆盖
    //1.方法名一样
    //2.参数列表一样(个数，类型，顺序)
    //3.返回值一样
    public void eat(){
        System.out.println(this.name + "正在吃猫粮");
    }
}

public class Test {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.name = "小狗";
        dog.eat();
        dog.wangWang();
        System.out.println("==========");
        Cat cat = new Cat();
        cat.name = "小猫";
        cat.eat();
        cat.miaoMiao();
        System.out.println("==========");
        //父类引用 引用了子类对象
        Animal animal = new Dog("小狗1"); //向上转型:子类对象给到父类
        animal.eat();
    }
}
